package practice6;

import java.util.Arrays;
import java.util.Scanner;

public class Ac3555 {
    static int N=1010;
    static int[] l=new int[N];	//表示左儿子
    static int[] r=new int[N];	//表示右儿子
    static int[] p=new int[N];	//表示父节点
    static int[] dist=new int[N];	//表示各个节点到根节点的距离

    public static void dfs(int i,int d) {
        dist[i]=d;
        if(l[i]!=-1) {
            dfs(l[i],d+1);		//继续搜左儿子
        }
        if(r[i]!=-1) {
            dfs(r[i],d+1);		//继续搜右儿子
        }
    }

    //爬树法求最近公共祖节点
    public static int getLca(int a,int b) {
        if(dist[a]>dist[b]) {
            //默认a比b高
            int temp=a;
            a=b;
            b=temp;
        }
        while(dist[a]<dist[b]) {
            b=p[b];		//b往上爬直到与a同一高度
        }
        while(a!=b) {
            a=p[a];
            b=p[b];		//a,b继续往上爬直到ab相等
        }
        return a;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        int T=sc.nextInt();
        while(T-->0) {
            int n=sc.nextInt();
            int m=sc.nextInt();
            Arrays.fill(l, -1);
            Arrays.fill(r, -1);
            for(int i=1;i<=n;i++) {
                int a=sc.nextInt();
                int b=sc.nextInt();
                l[i]=a;
                r[i]=b;
                if(a!=-1) {
                    p[a]=i;
                }
                if(b!=-1) {
                    p[b]=i;
                }
            }
            dfs(1,0);		//深搜遍历算出各个节点离根节点的距离

            for(int i=1;i<=m;i++) {
                int a=sc.nextInt();
                int b=sc.nextInt();
                //两节点距离等于他们分别到根节点的距离之和减去两倍的最近公共祖节点到根节点的距离
                System.out.println(dist[a]+dist[b]-2*dist[getLca(a,b)]);
            }
        }
    }
}
